/*
 Funções responsáveis por criar lista de classes, inserir uma classe na lista,
 retornar uma determinada classe
 */
#include "list.h"

extern class_list *methodarea;

class_list * new_list(void) {
	class_list *new;
	new = (class_list *) calloc(1, sizeof(class_list));
	if (!new) {
		printf("Erro ao tentar alocar uma nova lista.\n");
		exit(1);
	}
	new->first = NULL;
	if (VERBOSE) printf("Lista alocada;\n");
	return new;
}

void insert_node(class_list *l, class_file *class) {
	list_node *new_node;
	u2 class_name_index;

	if (!l) {
		printf("Lista inexistente");
		exit(1);
	}

	class_name_index
			= class->constant_pool[class->this_class - 1].info.Class.name_index;

	new_node = (list_node*) calloc(1, sizeof(list_node));
	new_node->class = class;
	new_node->class_name
			= class->constant_pool[class_name_index - 1].info.Utf8.bytes;

	if (empty_list(l) == 1) {
		new_node->next = NULL;
	} else {
		/* Cria um novo elemento e coloca ele no inicio da lista */
		new_node->next = l->first;
	}

	l->first = new_node;
	if (VERBOSE) printf("Nodo %s inserido na Lista;\n", new_node->class_name);

}

int empty_list(class_list *l) {
	if (!l) {
		printf("Lista vazia: parametro nulo");
		exit(1);
	}
	return l->first == NULL;
}
